package xyz.liut.crash;

import android.content.Context;
import android.content.Intent;
import android.util.Log;

import java.io.PrintWriter;
import java.io.StringWriter;

/**
 * @author Liut
 * @Description 全局异常handler
 * @date 2016/7/20
 */
public class CrashHandler implements Thread.UncaughtExceptionHandler {


    private static CrashHandler mCrashHandler;
    private Context context;

    private static final String TAG = "CrashHandler";

    public static CrashHandler getInstance() {
        if (mCrashHandler == null) {
            mCrashHandler = new CrashHandler();
        }
        return mCrashHandler;
    }

    public void init(Context context) {
        this.context = context;
        Thread.setDefaultUncaughtExceptionHandler(this);
    }

    private CrashHandler() {
    }


    @Override
    public void uncaughtException(Thread thread, Throwable ex) {

        if (ex != null) {
            //自定义异常处理
            Intent intent = new Intent(context, CrashActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            intent.putExtra(CrashActivity.EXTRA_EX, ex);
            context.startActivity(intent);

            StringWriter sw = new StringWriter();
            ex.printStackTrace(new PrintWriter(sw, true));
            String str = sw.toString();
            Log.e(TAG, "=======================================================================================================================================================================================");
            Log.e(TAG, "=======================================================================================================================================================================================");
            Log.e(TAG, "=======================================================================================================================================================================================");
            Log.e(TAG, str);
            Log.e(TAG, "=======================================================================================================================================================================================");
            Log.e(TAG, "=======================================================================================================================================================================================");
            Log.e(TAG, "=======================================================================================================================================================================================");

            try {
                Thread.sleep(200);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.exit(1);//关闭已奔溃的app进程
        }


    }

}
